//
// Created by LanK on 2024/12/29.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 100000

// 队列结构体定义
typedef struct {
    int data[MAX_SIZE];  // 存储队列元素
    int front;            // 队头指针
    int rear;             // 队尾指针
} Queue;

// 初始化队列
void initQueue(Queue* queue) {
    queue->front = 0;
    queue->rear = 0;
}

// 判断队列是否为空
int isEmpty(Queue* queue) {
    return queue->front == queue->rear;
}

// 入队操作
void push(Queue* queue, int x) {
    queue->data[queue->rear] = x;
    queue->rear = (queue->rear + 1) % MAX_SIZE;  // 循环队列，保证尾部不越界
}

// 出队操作
void pop(Queue* queue) {
    if (!isEmpty(queue)) {
        queue->front = (queue->front + 1) % MAX_SIZE;  // 队头指针后移
    }
}

// 查询队头元素
int query(Queue* queue) {
    if (!isEmpty(queue)) {
        return queue->data[queue->front];
    }
    return -1;  // 当队列为空时，返回-1
}

// 判断队列是否为空并输出结果
void empty(Queue* queue) {
    if (isEmpty(queue)) {
        printf("YES\n");
    } else {
        printf("NO\n");
    }
}

// 主函数
int main() {
    int M;
    scanf("%d", &M);  // 输入操作次数

    Queue queue;
    initQueue(&queue);  // 初始化队列

    char command[20];  // 用于读取命令
    int x;

    for (int i = 0; i < M; i++) {
        scanf("%s", command);  // 读取操作命令

        if (strcmp(command, "push") == 0) {
            scanf("%d", &x);  // 读取插入队列的元素
            push(&queue, x);
        } else if (strcmp(command, "pop") == 0) {
            pop(&queue);
        } else if (strcmp(command, "empty") == 0) {
            empty(&queue);
        } else if (strcmp(command, "query") == 0) {
            printf("%d\n", query(&queue));
        }
    }

    return 0;
}
